/**
 * Created by henian.xu on 2018/7/24.
 * 数据转换工具
 */

class Convert {
    listToTree(list, lv) {
        // console.log('convertListToTree');
        const res = [];
        const parentNodeMap = {};
        let minLv = 9999999;
        list.forEach(item => {
            // item.id 有值时才可能是父节点 (这个有数据问题 id 不应该不存在)
            if (item.id) {
                parentNodeMap[item.id] = item;
                minLv = lv || (item.lv < minLv ? item.lv : minLv);
            }
        });
        list.forEach(item => {
            // item.lv = minLv 时是根节点
            if (item.lv === minLv) {
                res.push(item);
            } else {
                const parentNode = parentNodeMap[item.parentId];
                if (parentNode) {
                    parentNode.children = parentNode.children || [];
                    parentNode.children.push(item);
                } else {
                    console.error('此节点数据有问题', item);
                }
            }
        });
        // console.log(res);
        this.sortTreeData(res);
        // console.log(res);
        return res;
    }

    sortAtOrderNum(list) {
        list.sort((prev, next) => {
            return prev.orderNum - next.orderNum || prev.id - next.id;
        });
    }

    sortTreeData(list) {
        if (!Array.isArray(list) && typeof list !== 'object') return;
        for (const item of list) {
            if (item.children && item.children.length) {
                this.sortTreeData(item.children);
            }
        }
        this.sortAtOrderNum(list);
    }
}

export default new Convert();
export { Convert };
